# 字典
# 定义一个空字典
from runpy import run_path

from project.hm_03_第三天的代码文件 import myList

dic1 = dict()
print(dic1, type(dic1))
dic2 = {}
print(dic2, type(dic2))
print("=" * 80)

# 定义一个有值的字典
dic1 = {"name": "张三", "age": 20, "gender": "男"}
print(dic1, type(dic1))
print(len(dic1))
print("=" * 80)

# 修改字典中的值
dic1["age"] = 25
print(dic1)
dic1["city"] = "北京"  # 不存在就添加新的键值对
print(dic1)
print("=" * 80)

# 删除字典中的键值对
del dic1["city"]
print(dic1)
print("=" * 80)

dic1["city"] = "上海"
dic1["hobby"] = ["看书", "唱歌", "跑步"]
print(dic1)
print("=" * 80)

dic1["hobby"].pop(1)  # 删除索引为1的元素
print(dic1)
print("=" * 80)

dic1["hobby"].append("游泳")  # 添加元素
print(dic1)
print("=" * 80)

# 查询
print(dic1["name"])
print(dic1.get("age"))  # 不存在返回None
print(dic1.get("city", "未知"))  # 不存在返回默认值
print(dic1.keys())  # 返回所有键
print(dic1.values())  # 返回所有值
print(dic1.items())  # 返回所有键值对

print(dic1["hobby"][0])  # 获取列表中爱好的的第一个元素
print(dic1.get("hobby")[0])  # 获取列表中爱好的的第一个元素
print("=" * 80)

# 字典的遍历
# 方式1
for key in dic1:
    print(key, ":", dic1[key])
print("=" * 80)

# 遍历字典中的键
for key in dic1.keys():
    print(key)
print("=" * 80)

# 遍历字典中的值
for value in dic1.values():
    print(value)
print("=" * 80)

# 方式2
# 遍历字典中的键值对
for key, value in dic1.items():
    print(key, ":", value)
print("=" * 80)

# 案例
# 测试用例
data = [
    {'desc': '登录失败，用户名为空', 'username': '', 'password': "123456", 'verify_code': '8888',
     'expect': '用户名不能为空'},
    {'desc': '登录失败，密码为空', 'username': '134444', 'password': "", 'verify_code': '8888',
     'expect': '密码不能为空'},
    {'desc': '登录失败，验证码为空', 'username': '134444', 'password': "123456", 'verify_code': '9999',
     'expect': '验证码不能为空'}
]
# 定义一个空列表，用于存储转换后的数据
lis = []
# 遍历数据列表中的每个字典元素
for d in data:
    # 打印当前用户的用户名、密码、验证码和期望结果
    print(f"用户名：{d['username']},密码：{d['password']},验证码：{d['verify_code']},期望结果：{d['expect']}")
    # 将字典的值转换为元组
    aa = tuple(d.values())
    # 将转换后的元组添加到列表中
    lis.append(aa)
print(lis)
print("=" * 80)
# 输出格式为：[('登录失败，用户名为空', '', '123456', '8888', '用户名不能为空'),(),(),(),()]
# 初始化一个空列表，用于存储数据
list = []
# 遍历数据源data中的每个元素d
for d in data:
    # 将每个元素d中的特定字段提取出来，组成一个元组，并添加到list中
    # 元组包含：描述(desc)、用户名(username)、密码(password)、验证码(verify_code)和期望结果(expect)
    list.append((d['desc'], d['username'], d['password'], d['verify_code'], d['expect']))
# 打印最终生成的列表
print(list)
print("=" * 80)

# 集合去重
# 方法1：集合
# a=[1,2,3,4,5,6,7,8,9,10,'a','b','c',1,5,4,4,4,2,1,2,1]
# print(a)
# b=set(a)
# c=list(b)
# print(c)
# 方法2：容器
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 1, 5, 4, 4, 4, 2, 1, 2, 1]
d = []
for i in a:
    if i not in d:
        d.append(i)
print(d)
print("=" * 80)


# 函数
def login():
    # 文档注释
    """
    登录功能函数
    该函数模拟用户登录的步骤流程，打印出登录所需的操作步骤
    """
    print("1.输入用户名")  # 提示用户输入用户名
    print("2.输入密码")  # 提示用户输入密码
    print("3.输入验证码")  # 提示用户输入验证码
    print("4.点击登录")  # 提示用户点击登录按钮


print("多行代码后")
login()

print("多行代码后")
login()
print("=" * 80)


# 对任意三个数字进行求和
def adds(a, b, c):
    """
    这是一个计算三个数之和的函数
    参数:
        a: 第一个加数
        b: 第二个加数
        c: 第三个加数
    返回:
        无直接返回值，但会打印计算结果
    """
    sums = a + b + c  # 计算三个数的和
    print(f"{a}+{b}+{c}={sums}")  # 以格式化的方式打印计算结果


adds(1, 2, 3)
adds(4, 5, 6)
adds(7, 8, 9)
print("=" * 80)


# 嵌套
def f1():
    print(1)  # 打印数字1
    print("f1")  # 打印字符串"f1"
    print(1)  # 再次打印数字1


def f2():
    print(2)  # 打印数字2
    print("f2")  # 打印字符串"f2"
    print(2)  # 再次打印数字2
    f1()  # 调用函数f1()


print("=" * 80)
f2()
print("=" * 80)


# return关键字
def add(a, b):
    """
    比较两个数的大小并返回相应的结果
    参数:
        a (int/float): 第一个比较的数字
        b (int/float): 第二个比较的数字
    返回:
        int/float/str: 返回较大的数或相等时的提示
    """
    if a > b:  # 如果a大于b
        return a  # 返回a
    elif b > a:  # 如果b大于a
        return b  # 返回b
    elif a == b:  # 如果a等于b
        return "a=b"  # 返回"a=b"字符串


print(add(3, 5))
print(add(5, 3))
print(add(3, 3))

# 案例
# def inputName():
#     return input("请输入您的姓名：")
# def inputPassword():
#     return input("请输入您的密码：")
# def logins():
#     name=inputName()
#     password=inputPassword()
#     if name=="admin" and password=="123456":
#         print("登录成功！")
#     else:
#         print("登录失败！用户名或密码错误！")
# logins()

print("=" * 80)
# 模块导入
# 导入random模块中的randint函数，用于生成随机整数
from random import randint

# 使用randint函数生成并打印一个1到100之间的随机整数
print(randint(1, 100))

from tools import sum_2_num

print(sum_2_num(1, 2))
print("=" * 80)
